﻿using System;
using System.Data;
using System.Windows;
using Innvoice.Logica.GestorObject;
using System.Collections.Generic;
using Innvoice.BaseDeDatos.innvoicedbDataSetTableAdapters;
using MySql.Data.MySqlClient;

namespace Innvoice.Logica.GestorDB
 
{
    public class ClienteDB
    {

        private Cliente CargarDatos(Cliente dataCliente, DataRow items)
        {
            dataCliente.Codigo = Convert.ToInt16(items["codigo_cliente"].ToString());
            dataCliente.RazonSocial = items["razon_social"].ToString();
            dataCliente.Telefono = items["telefono"].ToString();
            dataCliente.Correo = items["correo"].ToString();
            dataCliente.Web = items["web"].ToString();
            dataCliente.Contacto = items["contacto"].ToString();
            dataCliente.NroLocalidad = Convert.ToByte(items["localidad"].ToString());
            dataCliente.NroProvincia = Convert.ToByte(items["provincia"].ToString());
            dataCliente.NroPais = Convert.ToByte(items["pais"].ToString());
            dataCliente.NroCondicionDePago = Convert.ToByte(items["condicion_pago"]);
            dataCliente.Localidad = items["Localidaddescrip"].ToString();
            dataCliente.Provincia = items["provinciadescrip"].ToString();
            dataCliente.Pais = items["paisdescrip"].ToString();
            dataCliente.Direccion = items["direccion"].ToString();
            dataCliente.Tipodni = Convert.ToByte(items["tipo_dni"].ToString());
            dataCliente.NroDni = items["nro_dni"].ToString();
            dataCliente.CodigoPostal = items["cod_postal"].ToString();
            dataCliente.NroTipoContrib = Convert.ToByte(items["tipo_contrib"].ToString());
            dataCliente.TipoContrib = items["contribuyentedescrip"].ToString();
            dataCliente.Nrocontrib = items["nro_contrib"].ToString();
            dataCliente.ListaDePrecio = items["lista_precio"].ToString();
            dataCliente.Activo = Convert.ToByte(items["activo"]);
            dataCliente.FechaAltaSistema = items["fechadealta"].ToString();
            return dataCliente;
        }

        public List<Cliente> ObtenerClientesXLocalidad(byte miLocalidad)
        {
            List<Cliente> misClientes = new List<Cliente>();
            clienteTableAdapter dbCliente = new clienteTableAdapter();
            
            try
            {
                DataTable tablaCliente = dbCliente.GetDataByObtenerClientesXLocalidad(miLocalidad,1);

                foreach (DataRow items in tablaCliente.Rows)
                {
                    Cliente dataCliente = new Cliente();
                    misClientes.Add(CargarDatos(dataCliente, items));
                }
            }
            catch (Exception mException)
            {
                MessageBox.Show("Error: Classs ClienteDB - metodo: ObtenerClientesXLocalidad :: " + mException.Message , "Cuidado", MessageBoxButton.OK);
            }

            return misClientes;
        }

        public List<Cliente> ObtenerClientesXProvincia(byte miProvincia)
        {
            List<Cliente> misClientes = new List<Cliente>();
            clienteTableAdapter dbCliente = new clienteTableAdapter();

            try
            {
                DataTable tablaCliente = dbCliente.GetDataByFillByObtenerClietnesXprovincias(miProvincia, 1);

                foreach (DataRow items in tablaCliente.Rows)
                {
                    Cliente dataCliente = new Cliente();
                    misClientes.Add(CargarDatos(dataCliente, items));
                }
            }
            catch (Exception mException)
            {
                MessageBox.Show("Error: Classs ClienteDB - metodo: ObtenerClientesXProvincia :: " + mException.Message, "Cuidado", MessageBoxButton.OK);
            }

            return misClientes;
        }

        public List<Cliente> ObtenerDetalleTablaCliente()
        {
            clienteTableAdapter miTablacliente = new clienteTableAdapter();
            List<Cliente> misAtributos = new List<Cliente>();           
            
            DataTable tablaCliente = miTablacliente.GetData();

            Cliente miCli1 = new Cliente();            
            miCli1.NombreAtributoD = "Razon Social";
            miCli1.NombreAtributo = tablaCliente.Columns["razon_social"].ColumnName;
            misAtributos.Add(miCli1);

            Cliente miCli2 = new Cliente();
            miCli2.NombreAtributoD = "Localidad";
            miCli2.NombreAtributo = tablaCliente.Columns["localidad"].ColumnName;
            misAtributos.Add(miCli2);

            Cliente miCli3 = new Cliente();
            miCli3.NombreAtributoD = "Dirección";
            miCli3.NombreAtributo = tablaCliente.Columns["direccion"].ColumnName;
            misAtributos.Add(miCli3);

            Cliente miCli4 = new Cliente();
            miCli4.NombreAtributoD = "telefono";
            miCli4.NombreAtributo = tablaCliente.Columns["telefono"].ColumnName;
            misAtributos.Add(miCli4);

            Cliente miCli5 = new Cliente();
            miCli5.NombreAtributoD = "cod_postal";
            miCli5.NombreAtributo = tablaCliente.Columns["cod_postal"].ColumnName;
            misAtributos.Add(miCli5);

            Cliente miCli6 = new Cliente();
            miCli6.NombreAtributoD = "Tipo de Contribución";
            miCli6.NombreAtributo = tablaCliente.Columns["tipo_contrib"].ColumnName;
            misAtributos.Add(miCli6);

            Cliente miCli7 = new Cliente();
            miCli7.NombreAtributoD = "Nro. de Contribución";
            miCli7.NombreAtributo = tablaCliente.Columns["nro_contrib"].ColumnName;
            misAtributos.Add(miCli7);

            return misAtributos;
        }

        public List<Cliente> ObtenerAtributosOrdenacion()
        {
            clienteTableAdapter miTablacliente = new clienteTableAdapter();
            List<Cliente> misAtributos = new List<Cliente>();
            DataTable datosAtributos = miTablacliente.GetData();
            Cliente misAtributosCliente = new Cliente();

            datosAtributos = miTablacliente.GetData();
   
            misAtributosCliente.NombreAtributoD = "Provincia";
            misAtributosCliente.NombreAtributo = datosAtributos.Columns["provincia"].ColumnName;            
            misAtributos.Add(misAtributosCliente);

            Cliente misAtributosCliente2 = new Cliente();
            misAtributosCliente2.NombreAtributoD = "Localidad";
            misAtributosCliente2.NombreAtributo = datosAtributos.Columns["localidad"].ColumnName;
            misAtributos.Add(misAtributosCliente2);

            Cliente misAtributosCliente3 = new Cliente();
            misAtributosCliente3.NombreAtributoD = "Codigo Postal";
            misAtributosCliente3.NombreAtributo = datosAtributos.Columns["cod_postal"].ColumnName;
            misAtributos.Add(misAtributosCliente3);            

            return misAtributos;
        }

        public void DarDeAltaCliente(Cliente miCliente, int nro_empresa)
        {
            int iResult;
            clienteTableAdapter tablaCliente = new clienteTableAdapter();
            DataTable miTablaCliente = new DataTable();

            tablaCliente.Connection.Open();
            MySqlTransaction mitransaccion = tablaCliente.Connection.BeginTransaction();

            try
            {
                
                iResult = tablaCliente.InsertQueryDarDeAltaCliente(nro_empresa,
                                                                   miCliente.RazonSocial,
                                                                   miCliente.Telefono,
                                                                   miCliente.Correo,
                                                                   miCliente.Web,
                                                                   miCliente.Contacto,
                                                                   miCliente.Categoria,
                                                                   miCliente.Direccion,
                                                                   2,
                                                                   100,
                                                                   miCliente.CodigoPostal,
                                                                   miCliente.Tipodni,
                                                                   miCliente.NroDni,
                                                                   miCliente.NroTipoContrib,
                                                                   miCliente.Nrocontrib,
                                                                   miCliente.NroCondicionDePago,
                                                                   miCliente.ListaDePrecio,
                                                                   miCliente.LugarDeEntrega,
                                                                   miCliente.DiaHoraDePago,
                                                                   2,
                                                                   miCliente.FechaAltaSistema);
                //iResult = tablaCliente.InsertQueryDarDeAltaCliente(nro_empresa,
                //                                   miCliente.RazonSocial,
                //                                   miCliente.Telefono,
                //                                   miCliente.Correo,
                //                                   miCliente.Web,
                //                                   miCliente.Contacto,
                //                                   miCliente.Categoria,
                //                                   miCliente.Direccion,
                //                                   miCliente.NroLocalidad,
                //                                   miCliente.NroPais,
                //                                   miCliente.CodigoPostal,
                //                                   miCliente.Tipodni,
                //                                   miCliente.NroDni,
                //                                   miCliente.NroTipoContrib,
                //                                   miCliente.Nrocontrib,
                //                                   miCliente.NroCondicionDePago,
                //                                   miCliente.ListaDePrecio,
                //                                   miCliente.LugarDeEntrega,
                //                                   miCliente.DiaHoraDePago,
                //                                   miCliente.NroProvincia,
                //                                   miCliente.FechaAltaSistema);

                mitransaccion.Commit();

                if (iResult == 1)
                {
                    MessageBox.Show("Operacion de inserción exitosa", "Información", MessageBoxButton.OK);
                }


            }
            catch (Exception e)
            {
                mitransaccion.Rollback();
                MessageBox.Show("Class::ClienteDb::DarDeAltaCliente:: Error:: " + e.Message, "Error",
                                MessageBoxButton.OK);
            }
            finally
            {
                mitransaccion.Connection.Close();
            }
        }

        public void Actualizarcliente(Cliente miCliente, int nro_empresa)
        {
            int iResult;
            clienteTableAdapter tablaCliente = new clienteTableAdapter();
            DataTable miTablaCliente = new DataTable();

            tablaCliente.Connection.Open();
            MySqlTransaction mitransaccion = tablaCliente.Connection.BeginTransaction();


            try
            {
                //MessageBox.Show(nro_empresa + " -- " + miCliente.Codigo + " -- " + miCliente.Activo);
                iResult = tablaCliente.UpdateCliente(miCliente.RazonSocial,
                                                     miCliente.Telefono,
                                                     miCliente.Correo,
                                                     miCliente.Web,
                                                     miCliente.Contacto,
                                                     miCliente.Categoria,
                                                     miCliente.Direccion,
                                                     miCliente.NroLocalidad,
                                                     miCliente.NroPais,
                                                     miCliente.CodigoPostal,
                                                     miCliente.Tipodni,
                                                     miCliente.NroDni,
                                                     miCliente.NroTipoContrib,
                                                     miCliente.Nrocontrib,
                                                     miCliente.NroCondicionDePago,
                                                     miCliente.ListaDePrecio,
                                                     miCliente.Activo,
                                                     miCliente.LugarDeEntrega,
                                                     miCliente.DiaHoraDePago,
                                                     miCliente.NroProvincia,
                                                     miCliente.FechaAltaSistema,
                                                     nro_empresa,
                                                     miCliente.Codigo);
                mitransaccion.Commit();
                if (iResult == 1)
                {
                    MessageBox.Show("Operacion de Actualización exitosa", "Información", MessageBoxButton.OK);                    
                }
            }
            catch (Exception e)
            {
                mitransaccion.Rollback();
                MessageBox.Show("Class::ClienteDb::Actualizarcliente:: Error:: " + e.Message, "Error",  MessageBoxButton.OK);
            }
            finally
            {
                mitransaccion.Connection.Close();
            }
        }

        public List<Cliente> filtrarClientes(byte mactivo, int mlocalidad, int mprovincia, int mpais, string mcliente) {

            List<Cliente> misClientes = new List<Cliente>();
            clienteTableAdapter dbCliente = new clienteTableAdapter();
            DataTable tablaCliente = new DataTable();
            
            dbCliente.Connection.Open();
            MySqlTransaction mitransaccion = dbCliente.Connection.BeginTransaction();

            try
            {
                tablaCliente = dbCliente.GetDataByActivos_RazonSocial(mactivo, mlocalidad, mpais, mprovincia, mcliente);

                foreach (DataRow items in tablaCliente.Rows)
                {
                    Cliente dataCliente = new Cliente();
                    dataCliente.Codigo = Convert.ToInt16(items["codigo_cliente"].ToString());
                    dataCliente.RazonSocial = items["razon_social"].ToString();
                    dataCliente.Telefono = items["telefono"].ToString();
                    dataCliente.Correo = items["correo"].ToString();
                    dataCliente.Web = items["web"].ToString();
                    dataCliente.Contacto = items["contacto"].ToString();
                    dataCliente.NroLocalidad = Convert.ToByte(items["localidad"].ToString());
                    dataCliente.NroProvincia = Convert.ToByte(items["provincia"].ToString());
                    dataCliente.NroPais = Convert.ToByte(items["pais"].ToString());
                    dataCliente.NroCondicionDePago = Convert.ToByte(items["condicion_pago"]);
                    dataCliente.Localidad = items["Localidaddescrip"].ToString();
                    dataCliente.Provincia = items["provinciadescrip"].ToString();
                    dataCliente.Pais = items["paisdescrip"].ToString();
                    dataCliente.Direccion = items["direccion"].ToString();
                    dataCliente.Tipodni = Convert.ToByte(items["tipo_dni"].ToString());
                    dataCliente.CodigoPostal = items["cod_postal"].ToString();
                    dataCliente.NroTipoContrib = Convert.ToByte(items["tipo_contrib"].ToString());
                    dataCliente.TipoContrib = items["contribuyentedescrip"].ToString();
                    dataCliente.Nrocontrib = items["nro_contrib"].ToString();
                    dataCliente.ListaDePrecio = items["lista_precio"].ToString();
                    dataCliente.Activo = Convert.ToByte(items["activo"]);
                    dataCliente.FechaAltaSistema = items["fechadealta"].ToString();
                    misClientes.Add(dataCliente);
                }
            }
            catch (Exception mException)
            {
                MessageBox.Show("Error: Classs ClienteDB - metodo: ObtenerClientesXLocalidad :: " + mException.Message, "Cuidado", MessageBoxButton.OK);
                mitransaccion.Rollback();
            }
            finally
            {
                mitransaccion.Connection.Close();
            }

            return misClientes;
        }

    }

}
